package com.neusoft.databus.policy.vo;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.Length;

import com.neusoft.databus.policy.enums.EventStatus;
import com.neusoft.databus.policy.enums.PolicyType;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * 发送mqVO
 * 
 * @author naxiang
 */

@Getter
@Setter
@ToString
public class EventVO implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -3357088612129871964L;

    private Long id;

    /**
     * 事件编码
     */
    @NotBlank(message = "事件编码不能为空")
    @Length(max = 255, message = "事件编码不能超过{max}位")
    private String code;

    /**
     * 事件状态
     */
    @Enumerated(EnumType.STRING)
    @NotNull(message = "事件状态不能为空")
    private EventStatus status;

    /**
     * 事件级别
     */
    private String priority;
    /**
     * 触发次数
     */
    @Min(value = 1, message = "触发次数不能小于{value}")
    private Long count = 1L;

    /**
     * 事件最近发生时间
     */
    private Date lastTime;
    /**
     * 事件解除时间
     */
    private Date fixTime;

    /**
     * 事件内容
     */
    @Length(max = 1023, message = "事件内容不能超过{max}位")
    private String content;
    /**
     * 资源编码
     */
    @NotBlank(message = "资源编码不能为空")
    @Length(max = 255, message = "资源编码不能超过{max}位")
    private String resourceCode;
    /**
     * 资源名称
     */
    @Length(max = 255, message = "资源名称不能超过{max}位")
    private String resourceName;
    /**
     * 策略类型
     */
    @Enumerated(EnumType.STRING)
    @NotNull(message = "策略类型不能为空")
    private PolicyType type;

    /**
     * 策略编码
     */
    @NotBlank(message = "策略编码不能为空")
    @Length(max = 255, message = "策略编码不能超过{max}位")
    private String policyCode;

    /**
     * 指标编码
     */
    @Length(max = 255, message = "指标编码不能超过{max}位")
    private String metricCode;

    /**
     * 指标名称
     */
    @Length(max = 255, message = "指标编码不能超过{max}位")
    private String metricName;

    /**
     * 子系统code
     */
    @Length(max = 255, message = "子系统编码不能超过{max}位")
    private String subSystemCode;

    private String alarmType;

    private String confirmer;
}
